const express = require('express');
const router = express.Router();
const db = require('../db');

// 获取所有宿舍信息接口
router.get("/dorms", (req, res) => {
  const query = "SELECT * FROM dorms"; // 查询所有宿舍信息
  db.query(query, (err, results) => {
    if (err) {
      return res.status(500).json({ error: err.message });
    }
    res.json(results); // 返回查询到的宿舍数据
  });
});

// 分配学生到宿舍接口
router.post("/dorms/assign", (req, res) => {
  const { dormId, studentId } = req.body;
  console.log("Received request:", req.body); // 打印接收到的请求参数
  if (!dormId || !studentId) {
    return res.status(400).json({ error: "宿舍ID和学生学号不能为空" });
  }

  // 查询宿舍状态和已住人数
  const checkDormQuery = "SELECT * FROM dorms WHERE dorm_id = ?";
  db.query(checkDormQuery, [dormId], (err, dormResult) => {
    if (err) {
      console.log(err.message)
      return res.status(500).json({ error: err.message });
    }

    if (dormResult.length === 0) {
      return res.status(404).json({ error: "未找到该宿舍" });
    }

    const dorm = dormResult[0];
    if (dorm.status !== "空余") {
      return res.status(400).json({ error: "该宿舍不是空余状态，无法分配" });
    }

    // 查询学生是否已存在
    const checkStudentQuery = "SELECT * FROM students WHERE studentId = ?";
    db.query(checkStudentQuery, [studentId], (err, studentResult) => {
      if (err) {
        console.log(err.message)
        return res.status(500).json({ error: err.message });
      }

      if (studentResult.length === 0) {
        return res.status(404).json({ error: "未找到该学生" });
      }

      db.beginTransaction((err) => {
        if (err) {
          return res.status(500).json({ error: "启动事务失败" });
        }

        // 更新宿舍表
        const updateDormQuery = `
    UPDATE dorms 
    SET 
      occupied = occupied + 1, 
      status = CASE 
                WHEN occupied + 1 >= capacity THEN '已满' 
                ELSE '空余' 
              END 
    WHERE dorm_id = ?`;

        db.query(updateDormQuery, [dormId], (err) => {
          if (err) {
            console.log(err)
            return db.rollback(() => res.status(500).json({ error: "更新宿舍失败" }));
          }

          // 更新学生表
          const updateStudentQuery = "UPDATE students SET dorm_id = ? WHERE studentId = ?";
          db.query(updateStudentQuery, [dormId, studentId], (err) => {
            if (err) {
              return db.rollback(() => res.status(500).json({ error: "更新学生信息失败" }));
            }

            // 提交事务
            db.commit((err) => {
              if (err) {
                return db.rollback(() => res.status(500).json({ error: "事务提交失败" }));
              }
              res.json({ message: "学生分配成功" });
            });
          });
        });
      });


    });
  });
});

module.exports = router;
